package com.proyecto.seguridad.modelo.dao;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.proyecto.seguridad.modelo.dto.SegOperaciones;

/**
 * Data access object (DAO) for domain model class SegOperaciones.
 * 
 * @see com.openLabs.persona.modelo.dao.SegOperaciones
 * @author MyEclipse Persistence Tools
 */

public class SegOperacionesDAO extends HibernateDaoSupport {
	private static final Log log = LogFactory.getLog(SegOperacionesDAO.class);
	// property constants
	public static final String OPERACIONNOMBRE = "operacionnombre";
	public static final String OPERACIONOBJETO = "operacionobjeto";
	public static final String OPERACIONMENUTIPO = "operacionmenutipo";
	public static final String OPERACIONNIVEL1 = "operacionnivel1";
	public static final String OPERACIONNIVEL2 = "operacionnivel2";
	public static final String OPERACIONNIVEL3 = "operacionnivel3";
	public static final String OPERACIONNIVEL4 = "operacionnivel4";
	public static final String OPERACIONNIVEL5 = "operacionnivel5";
	public static final String OPERACIONFORMATO = "operacionformato";
	public static final String VALORPORDEFECTO = "valorpordefecto";
	public static final String AUDITESTATREGISTRO = "auditestatregistro";
	public static final String AUDITRAZONOPER = "auditrazonoper";
	public static final String AUDITFECHAANULAC = "auditfechaanulac";
	public static final String AUDITFECHACAMBIO = "auditfechacambio";
	public static final String AUDITHORACAMBIO = "audithoracambio";
	public static final String AUDITFECHACREACION = "auditfechacreacion";
	public static final String AUDITHORACREACION = "audithoracreacion";
	public static final String AUDITCODUSUARIO = "auditcodusuario";
	public static final String AUDITCODSUPERVISOR = "auditcodsupervisor";
	public static final String CAMPOUSUARIOCHAR1 = "campousuariochar1";
	public static final String CAMPOUSUARIOCHAR2 = "campousuariochar2";
	public static final String CAMPOUSUARIOCHAR3 = "campousuariochar3";
	public static final String CAMPOUSUARIOCHAR4 = "campousuariochar4";
	public static final String CAMPOUSUARIOCHAR5 = "campousuariochar5";
	public static final String CAMPOUSUARIONUM1 = "campousuarionum1";
	public static final String CAMPOUSUARIONUM2 = "campousuarionum2";
	public static final String CAMPOUSUARIONUM3 = "campousuarionum3";
	public static final String CAMPOUSUARIONUM4 = "campousuarionum4";
	public static final String CAMPOUSUARIONUM5 = "campousuarionum5";

	protected void initDao() {
		// do nothing
	}

	public void save(SegOperaciones transientInstance) {
		log.debug("saving SegOperaciones instance");
		try {
			getHibernateTemplate().save(transientInstance);
			log.debug("save successful");
		} catch (RuntimeException re) {
			log.error("save failed", re);
			throw re;
		}
	}

	public void delete(SegOperaciones persistentInstance) {
		log.debug("deleting SegOperaciones instance");
		try {
			getHibernateTemplate().delete(persistentInstance);
			log.debug("delete successful");
		} catch (RuntimeException re) {
			log.error("delete failed", re);
			throw re;
		}
	}

	public SegOperaciones findById(
			com.proyecto.seguridad.modelo.dto.SegOperacionesId id) {
		log.debug("getting SegOperaciones instance with id: " + id);
		try {
			SegOperaciones instance = (SegOperaciones) getHibernateTemplate()
					.get("com.openLabs.persona.modelo.dao.SegOperaciones", id);
			return instance;
		} catch (RuntimeException re) {
			log.error("get failed", re);
			throw re;
		}
	}

	public List findByExample(SegOperaciones instance) {
		log.debug("finding SegOperaciones instance by example");
		try {
			List results = getHibernateTemplate().findByExample(instance);
			log.debug("find by example successful, result size: "
					+ results.size());
			return results;
		} catch (RuntimeException re) {
			log.error("find by example failed", re);
			throw re;
		}
	}

	public List findByProperty(String propertyName, Object value) {
		log.debug("finding SegOperaciones instance with property: "
				+ propertyName + ", value: " + value);
		try {
			String queryString = "from SegOperaciones as model where model."
					+ propertyName + "= ?";
			return getHibernateTemplate().find(queryString, value);
		} catch (RuntimeException re) {
			log.error("find by property name failed", re);
			throw re;
		}
	}

	public List findByOperacionnombre(Object operacionnombre) {
		return findByProperty(OPERACIONNOMBRE, operacionnombre);
	}

	public List findByOperacionobjeto(Object operacionobjeto) {
		return findByProperty(OPERACIONOBJETO, operacionobjeto);
	}

	public List findByOperacionmenutipo(Object operacionmenutipo) {
		return findByProperty(OPERACIONMENUTIPO, operacionmenutipo);
	}

	public List findByOperacionnivel1(Object operacionnivel1) {
		return findByProperty(OPERACIONNIVEL1, operacionnivel1);
	}

	public List findByOperacionnivel2(Object operacionnivel2) {
		return findByProperty(OPERACIONNIVEL2, operacionnivel2);
	}

	public List findByOperacionnivel3(Object operacionnivel3) {
		return findByProperty(OPERACIONNIVEL3, operacionnivel3);
	}

	public List findByOperacionnivel4(Object operacionnivel4) {
		return findByProperty(OPERACIONNIVEL4, operacionnivel4);
	}

	public List findByOperacionnivel5(Object operacionnivel5) {
		return findByProperty(OPERACIONNIVEL5, operacionnivel5);
	}

	public List findByOperacionformato(Object operacionformato) {
		return findByProperty(OPERACIONFORMATO, operacionformato);
	}

	public List findByValorpordefecto(Object valorpordefecto) {
		return findByProperty(VALORPORDEFECTO, valorpordefecto);
	}

	public List findByAuditestatregistro(Object auditestatregistro) {
		return findByProperty(AUDITESTATREGISTRO, auditestatregistro);
	}

	public List findByAuditrazonoper(Object auditrazonoper) {
		return findByProperty(AUDITRAZONOPER, auditrazonoper);
	}

	public List findByAuditfechaanulac(Object auditfechaanulac) {
		return findByProperty(AUDITFECHAANULAC, auditfechaanulac);
	}

	public List findByAuditfechacambio(Object auditfechacambio) {
		return findByProperty(AUDITFECHACAMBIO, auditfechacambio);
	}

	public List findByAudithoracambio(Object audithoracambio) {
		return findByProperty(AUDITHORACAMBIO, audithoracambio);
	}

	public List findByAuditfechacreacion(Object auditfechacreacion) {
		return findByProperty(AUDITFECHACREACION, auditfechacreacion);
	}

	public List findByAudithoracreacion(Object audithoracreacion) {
		return findByProperty(AUDITHORACREACION, audithoracreacion);
	}

	public List findByAuditcodusuario(Object auditcodusuario) {
		return findByProperty(AUDITCODUSUARIO, auditcodusuario);
	}

	public List findByAuditcodsupervisor(Object auditcodsupervisor) {
		return findByProperty(AUDITCODSUPERVISOR, auditcodsupervisor);
	}

	public List findByCampousuariochar1(Object campousuariochar1) {
		return findByProperty(CAMPOUSUARIOCHAR1, campousuariochar1);
	}

	public List findByCampousuariochar2(Object campousuariochar2) {
		return findByProperty(CAMPOUSUARIOCHAR2, campousuariochar2);
	}

	public List findByCampousuariochar3(Object campousuariochar3) {
		return findByProperty(CAMPOUSUARIOCHAR3, campousuariochar3);
	}

	public List findByCampousuariochar4(Object campousuariochar4) {
		return findByProperty(CAMPOUSUARIOCHAR4, campousuariochar4);
	}

	public List findByCampousuariochar5(Object campousuariochar5) {
		return findByProperty(CAMPOUSUARIOCHAR5, campousuariochar5);
	}

	public List findByCampousuarionum1(Object campousuarionum1) {
		return findByProperty(CAMPOUSUARIONUM1, campousuarionum1);
	}

	public List findByCampousuarionum2(Object campousuarionum2) {
		return findByProperty(CAMPOUSUARIONUM2, campousuarionum2);
	}

	public List findByCampousuarionum3(Object campousuarionum3) {
		return findByProperty(CAMPOUSUARIONUM3, campousuarionum3);
	}

	public List findByCampousuarionum4(Object campousuarionum4) {
		return findByProperty(CAMPOUSUARIONUM4, campousuarionum4);
	}

	public List findByCampousuarionum5(Object campousuarionum5) {
		return findByProperty(CAMPOUSUARIONUM5, campousuarionum5);
	}

	public List findAll() {
		log.debug("finding all SegOperaciones instances");
		try {

			String queryString = "from SegOperaciones"; 
			return getHibernateTemplate().find(queryString);
		} catch (RuntimeException re) {
			log.error("find all failed", re);
			throw re;
		}
	}
	
	public List findMenuElements() {
		log.debug("finding all SegOperaciones instances");
		try {

			String queryString = "from SegOperaciones oper " +
					"where oper.operacionmenutipo = 'A' OR oper.operacionmenutipo = 'B'" +
					"order by oper.operacionnivel1 desc, " +
					"oper.operacionnivel2 desc, " +
					"oper.operacionnivel3 desc, " +
					"oper.operacionnivel4 desc, " +
					"oper.operacionnivel5 desc ";
			return getHibernateTemplate().find(queryString);
		} catch (RuntimeException re) {
			log.error("find all failed", re);
			throw re;
		}
	}

	public SegOperaciones merge(SegOperaciones detachedInstance) {
		log.debug("merging SegOperaciones instance");
		try {
			SegOperaciones result = (SegOperaciones) getHibernateTemplate()
					.merge(detachedInstance);
			log.debug("merge successful");
			return result;
		} catch (RuntimeException re) {
			log.error("merge failed", re);
			throw re;
		}
	}

	public void attachDirty(SegOperaciones instance) {
		log.debug("attaching dirty SegOperaciones instance");
		try {
			getHibernateTemplate().saveOrUpdate(instance);
			log.debug("attach successful");
		} catch (RuntimeException re) {
			log.error("attach failed", re);
			throw re;
		}
	}

	public void attachClean(SegOperaciones instance) {
		log.debug("attaching clean SegOperaciones instance");
		try {
			getHibernateTemplate().lock(instance, LockMode.NONE);
			log.debug("attach successful");
		} catch (RuntimeException re) {
			log.error("attach failed", re);
			throw re;
		}
	}

	public static SegOperacionesDAO getFromApplicationContext(
			ApplicationContext ctx) {
		return (SegOperacionesDAO) ctx.getBean("SegOperacionesDAO");
	}

}